package one.stand.enums;

import lombok.extern.slf4j.Slf4j;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * @author Administrator
 */
@Slf4j
public class EnumUtil {
    public static <T extends Enum<T>> T getByIntegerTypeCode(Class<T> clazz, String getTypeCodeMethodName, String typeCode) {
        T result = null;
        try {
            //Enum接口中没有values()方法，我们仍然可以通过Class对象取得所有的enum实例
            T[] arr = clazz.getEnumConstants();
            //获取定义的方法
            Method targetMethod = clazz.getDeclaredMethod(getTypeCodeMethodName);
            String typeCodeVal = null;
            //遍历枚举定义
            for (T entity : arr) {
                //获取传过来方法的
                typeCodeVal = targetMethod.invoke(entity).toString();
                //执行的方法的值等于参数传过来要判断的值
                if (typeCodeVal.equals(typeCode)) {
                    //返回这个枚举
                    result = entity;
                    break;
                }
            }
        } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) {
            log.error("数字转枚举类型[异常]", e);
        }
        return result;
    }


    /**
     * 创建keywordid
     * @param i
     * @param thing
     * @return
     */
    public static KeyWordId create(int i, KeyWordType thing) {
        return new KeyWordId(i,thing);
    }
}
